Aller au contenu principal

Docker vs Containerd

La différence entre Docker et Containerd réside dans leurs rôles et fonctionnalités au sein de l'écosystème des conteneurs.

Docker : Docker est une plateforme qui fournit une solution de bout en bout pour la construction, l'empaquetage, la distribution et l'exécution de conteneurs. Elle comprend de nombreux composants tels que le CLI Docker, l'API Docker, le runtime de conteneur (runC) et le démon Docker (containerd). Docker a été le premier moteur d'exécution de conteneurs largement adopté et a joué un rôle important dans la popularisation des conteneurs. Il offre une interface conviviale et diverses fonctionnalités pour la gestion des conteneurs.

Containerd : Containerd est un moteur d'exécution de conteneurs qui a été initialement développé dans le cadre du projet Docker. Au fil du temps, il est devenu un projet distinct et a rejoint la Cloud Native Computing Foundation (CNCF) en tant que projet gradué. Containerd est conçu pour être léger, efficace, et se concentrer sur l'exécution fiable des conteneurs. Il suit les normes de la Container Runtime Interface (CRI) définies par Kubernetes et peut être utilisé comme runtime pour les systèmes d'orchestration de conteneurs tels que Kubernetes.

Voici un aperçu des principaux points :

  • Docker : Docker est une plateforme de conteneurs complète qui comprend divers composants tels que le CLI, l'API, le moteur d'exécution de conteneurs et le démon. Elle offre une solution complète pour la construction, la distribution et l'exécution de conteneurs.

  • Containerd : Containerd est un moteur d'exécution de conteneurs autonome qui fournit les fonctionnalités de base pour l'exécution des conteneurs. Il est léger, efficace et adhère aux normes CRI. Containerd peut être utilisé comme runtime par des systèmes d'orchestration de conteneurs comme Kubernetes.

Dans le contexte de Kubernetes :

Au départ, Kubernetes s'intégrait étroitement à Docker et s'appuyait sur lui en tant que système d'exécution de conteneurs par défaut. Toutefois, à mesure que l'écosystème des conteneurs s'est développé, Kubernetes a introduit l'interface d'exécution de conteneur (CRI) pour se découpler des moteurs d'exécution de conteneur spécifiques et prendre en charge plusieurs moteurs d'exécution.

Grâce à l'interface CRI, des moteurs d'exécution de conteneurs tels que Containerd, CRI-O et d'autres sont devenus compatibles avec Kubernetes. Cela signifie que Kubernetes peut fonctionner avec différents moteurs d'exécution de conteneurs, et pas seulement avec Docker. Containerd, étant compatible avec CRI, peut directement fonctionner avec Kubernetes et est considéré comme un choix d'exécution approprié.

Pour résumer, Docker est une plateforme de conteneurs complète avec divers composants, y compris un moteur d'exécution de conteneurs appelé containerd. Containerd, quant à lui, est un moteur d'exécution de conteneurs autonome qui adhère aux normes CRI et peut être utilisé directement avec Kubernetes. Docker et Containerd ont tous deux des objectifs différents dans l'écosystème des conteneurs, Docker fournissant une solution de conteneur complète et Containerd se concentrant sur des capacités d'exécution de conteneur efficaces.

En ce qui concerne les outils CLI mentionnés dans la vidéo :

CTR (Containerd CLI) : CTR est un outil de ligne de commande fourni avec Containerd. Il est principalement utilisé pour le débogage de Containerd et dispose d'un ensemble limité de fonctionnalités. Il n'est pas destiné à la gestion générale des conteneurs ou à une utilisation en production.

Nerdctl (Nerd Control) : Nerdctl est un outil de ligne de commande développé par la communauté Containerd. Il vise à fournir une expérience de CLI similaire à Docker pour gérer les conteneurs avec Containerd. Nerdctl supporte la plupart des commandes Docker et offre également un accès aux nouvelles fonctionnalités implémentées dans Containerd.

CRI CTL (CRI Control) : CRI CTL est un utilitaire en ligne de commande développé et maintenu par la communauté Kubernetes. Il est utilisé pour interagir avec les runtimes de conteneurs compatibles CRI, y compris Containerd. CRI CTL est principalement utilisé pour inspecter et déboguer les runtimes de conteneurs du point de vue de Kubernetes.

En conclusion, si vous travaillez avec Kubernetes et Containerd, vous pouvez utiliser des outils comme Nerdctl ou CRI CTL pour gérer les conteneurs, en fonction de vos besoins spécifiques. CTR est principalement destiné au débogage de Containerd et peut ne pas être adapté aux tâches générales de gestion des conteneurs.


La principale différence entre Docker et containerd réside dans leur champ d'application et leurs fonctionnalités. En voici les points essentiels :

Docker : Docker est une plateforme complète de développement, d'empaquetage et de déploiement d'applications utilisant la conteneurisation. Elle comprend divers composants tels que le moteur Docker (moteur d'exécution des conteneurs), l'interface de ligne de commande Docker (CLI), l'API Docker, des outils de création d'images, la prise en charge des volumes, de l'authentification, de la sécurité, etc. Docker était initialement l'outil de conteneur dominant et largement utilisé en conjonction avec Kubernetes pour l'orchestration des conteneurs.

containerd : containerd est un moteur d'exécution de conteneurs open-source développé dans le cadre d'un projet distinct. C'est un composant essentiel de Docker et il est également membre de la Cloud Native Computing Foundation (CNCF). containerd adhère aux normes établies par l'Open Container Initiative (OCI), qui définit les spécifications des images de conteneurs et des moteurs d'exécution. Il fournit un environnement d'exécution léger, stable et sécurisé pour les conteneurs.

En résumé :

Docker est une plateforme complète qui comprend de nombreux outils et composants, tandis que containerd est un moteur d'exécution de conteneur léger.
Docker était largement utilisé dans le passé et étroitement couplé à Kubernetes, mais containerd a gagné en popularité en tant que runtime autonome.
Docker se compose de l'interface de commande Docker, de l'API Docker, des outils de construction, du moteur d'exécution de conteneurs (runC) et du démon de conteneurs (containerd).
containerd peut être utilisé indépendamment sans avoir à installer l'ensemble de la plateforme Docker. Il est compatible avec l'interface d'exécution des conteneurs (CRI) et peut fonctionner directement avec Kubernetes.
Kubernetes prend en charge plusieurs moteurs d'exécution de conteneurs par l'intermédiaire de l'interface CRI, y compris containerd. Docker, en tant que runtime, était supporté par une solution temporaire appelée Docker shim mais a été retiré du support de Kubernetes à partir de la version 1.24.
En ce qui concerne les outils CLI mentionnés :

ctr (Command Line ctr) : Il s'agit d'un outil de ligne de commande fourni avec containerd. Il est principalement utilisé pour déboguer containerd et dispose d'un ensemble limité de fonctionnalités. Il n'est pas recommandé pour la gestion générale des conteneurs ou pour une utilisation en production.

nerdctl (ligne de commande nerdctl) : Il s'agit d'un outil de ligne de commande développé par la communauté containerd en tant que CLI de type Docker pour containerd. Il supporte la plupart des commandes Docker et donne accès aux dernières fonctionnalités implémentées dans containerd. Il est conçu pour être une alternative conviviale à ctr.

crictl (Command Line crictl) : Il s'agit d'un utilitaire en ligne de commande développé et maintenu par la communauté Kubernetes. Il est utilisé pour interagir avec n'importe quelle exécution de conteneur compatible avec CRI, y compris containerd. Il est principalement utilisé pour inspecter et déboguer les exécutions de conteneurs du point de vue de Kubernetes.

En résumé, Docker et containerd ont des objectifs différents, Docker étant une plateforme complète et containerd un runtime de conteneur léger. Containerd peut être utilisé indépendamment, et les outils CLI comme nerdctl et crictl fournissent des interfaces alternatives pour containerd et d'autres runtimes compatibles CRI.